home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / WFC010.ZIP / INCLUDE / MTF.H < prev    next >
Text File  |  1995-11-10  |  25KB  |  421 lines

  1. /*
  2. ** Author: Samuel R. Blackburn
  3. ** CI$: 76300,326
  4. ** Internet: sammy@sed.csc.com
  5. **
  6. ** You can use it any way you like as long as you don't try to sell it.
  7. **
  8. ** Any attempt to sell WFC in source code form must have the permission
  9. ** of the original author. You can produce commercial executables with
  10. ** WFC but you can't sell WFC.
  11. **
  12. ** This header file came from MTF10.PS.
  13. **
  14. ** Copyright, 1995, Samuel R. Blackburn
  15. */
  16.  
  17. #if ! defined( MICROSOFT_TAPE_FORMAT_HEADER )
  18.  
  19. #define MICROSOFT_TAPE_FORMAT_HEADER
  20.  
  21. /**  Name:          mtf.h
  22.      Description:   Structures and constants used in writing MTF and OTC.
  23.      Notes:         References are made throughout this header to a Logical
  24.                     Block Address (LBA).  The LBA of a given DBLK is its
  25.                     offset in Logical Blocks from the FIRST SSET of the set
  26.                     it is associated with.  The size of a Logical Block for
  27.                     a given tape is defined in the Tape Header.  The LBA is
  28.                     used along with the Physical Block Address (PBA) to
  29.                     calculate the physical location of a DBLK on tape.
  30.                     TAPE and EOTM DBLKs have no associated SSET, so the
  31.                     concept of an LBA is not defined for these blocks.
  32.                     The SSET DBLK itself is at LBA 0.  However, if a set
  33.                     crosses EOM and a continuation tape is written, the
  34.                     LBA in the continuation SSET will contain an adjusted
  35.                     logical offset, along with a PBA, to allow for the
  36.                     calculation of physical locations of DBLKs on the
  37.                     continuation tape.
  38. **/
  39. /* Defines for DBLK Common Block Attribute Bits
  40.    The lower 16 bits of the Common Block Attribute are reserved for general
  41.    attribute bits, (those which may appear in more than one type of DBLK), the upper
  42.    16 bits are reserved for attributes which are specific to one type of DBLK.
  43.    Note: the Common Block specific bit definitions overlap, and the block type is
  44.          used to determine the meaning of a given bit.
  45. */
  46. /* General: */
  47. #define MTF_DB_CONT_BIT              BIT0  /* Indicates continuation DBLK  */
  48. #define MTF_DB_ENCRYPT_BIT           BIT1  /* data is encrypted            */
  49. #define MTF_DB_COMPRESS_BIT          BIT2  /* Data is  software compressed */
  50. #define MTF_DB_EOS_AT_EOM_BIT        BIT3  /* End Of Media encountered
  51.             during End Of Set processing */
  52. #define MTF_DB_VAR_BLKS_BIT          BIT4  /* DBLK data is variable length */
  53. #define MTF_DB_SESSION_BIT           BIT5  /* This set contains interleaved
  54.                                               data streams(multiple sessions)*/
  55. /* TAPE DBLK */
  56. #define MTF_DB_SM_EXISTS             BIT16  /* Tape contains OTC Set Map    */
  57. #define MTF_DB_FDD_ALLOWED           BIT17  /* Sets on tape may contain OTC
  58.             File/Directory Detail        */
  59. #define MTF_DB_SM_ALT_PART           BIT18  /* OTC Set Map is written on an
  60.             alternate partition          */
  61. #define MTF_DB_FDD_ALT_PART          BIT19  /* OTC File/Directory Data is
  62.             written on an alternate partition */
  63. #define MTF_DB_EOM_BETWEEN_SETS_BIT  BIT20 /* End Of Media encountered after End
  64.                                               Of Set processing            */
  65. /* SSET DBLK */
  66. #define MTF_DB_FDD_EXISTS            BIT16  /* Set contains OTC F/DD        */
  67. /* ESET DBLK */
  68. #define MTF_DB_FDD_ABORTED_BIT       BIT16 /* OTC F/DD not written         */
  69. #define MTF_DB_END_OF_FAMILY_BIT     BIT17 /* Tape may not be appended to  */
  70. #define MTF_DB_ABORTED_SET_BIT       BIT18 /* Backup was aborted           */
  71. #define MTF_DB_SET_VERIFIED_BIT      BIT19 /* On DC2000 Devices, CRC/ECC verify
  72.                                               was done                     */
  73. #define MTF_DB_SET_COMPARED_BIT      BIT17 /* This set was auto-verified after
  74.                                              backup                       */
  75. /* EOTM DBLK */
  76. #define MTF_DB_NO_ESET_PBA           BIT16 /* Tape doesn't contain an ESET */
  77. #define MTF_DB_INVALID_ESET_PBA      BIT17 /* PBA not available on device  */
  78. /* Macro to make a UINT32 representation of the 4 byte IDs */
  79. #define MTF_MARKER(a,b,c,d)
  80. (UINT32)((((UINT32)d)<<24)+\
  81. (((UINT32)c)<<16)+\
  82. (((UINT32)b)<<8)+\
  83. (UINT32)a))
  84. /* Structure definition for unsigned 64 bit integers */
  85. typedef struct {
  86.      UINT32 lsw ;   /* Least significant 32 bits */
  87.      UINT32 msw ;   /* Most significant 32 bits  */
  88. } UINT64, *UINT64_PTR;
  89. /* Compressed date structure for storing dates in minimal space on tape
  90.      BYTE 0    BYTE 1    BYTE 2    BYTE 3    BYTE 4
  91.     76543210  76543210  76543210  76543210  76543210
  92.     yyyyyyyy  yyyyyymm  mmdddddh  hhhhmmmm  mmssssss  */
  93. typedef struct {
  94.      UINT8     dt_field[5] ;
  95. } MTF_DATE_TIME, * MTF_DATE_TIME_PTR ;
  96. /* Tape Address Structure used for size and offset of variable length
  97.    fields in DBLKs (i.e. the backup set name in an SSET). */
  98. typedef struct {
  99.      UINT16    data_size ;        /* Size of the data   */
  100.      UINT16    data_offset ;      /* Offset to the data */
  101. } MTF_TAPE_ADDRESS, *MTF_TAPE_ADDRESS_PTR ;
  102. /* Structure definitions for stream header/descriptor */
  103. typedef struct {
  104.    UINT32   stream_id ;             /* Identifier for a stream */
  105.    UINT16   stream_fs_attribute ;   /* File System Attributes */
  106.    UINT16   stream_tf_attribute ;   /* Tape Format Attributes */
  107.    UINT64   stream_length ;         /* Length of the data stream */
  108.    UINT16   encryption_algorithm ;  /* Data Encryption Algorithm */
  109.    UINT16   compression_algorithm ; /* Data Compression Algorithm */
  110.    UINT16   checksum ;              /* word-wise XOR checksum of prev fields */
  111. } MTF_STREAM_DESC, * MTF_STREAM_DESC_PTR ;
  112. typedef struct {
  113.    UINT32   stream_id ;             /* Identifier for stream */
  114.    UINT16   stream_fs_attribute ;   /* File System Attributes */
  115.    UINT16   stream_tf_attribute ;   /* Tape Format Attributes */
  116.    UINT64   stream_length ;         /* Length of the data stream */
  117.    UINT16   encryption_algorithm ;  /* Data Encryption Algorithm */
  118.    UINT16   compression_algorithm ; /* Data Compression Algorithm */
  119.    UINT64   stream_object ;         /* LBA of DBLK associated with stream */
  120.    UINT64   stream_session_id ;     /* LBA of Start of Session (SSES) DBLK */
  121.    UINT16   checksum ;              /* word-wise XOR checksum of prev fields */
  122. } MTF_ISTREAM_DESC, * MTF_ISTREAM_DESC_PTR ;
  123. /* Defines for stream Identifers */
  124. #define  MTF_STANDARD_DATA       MTF_MARKER( 'S','T','A','N' )
  125. #define  MTF_NT_SECURITY_DATA    MTF_MARKER( 'N','A','C','L' )
  126. #define  MTF_NTFS_EA_DATA        MTF_MARKER( 'N','T','E','A' )
  127. #define  MTF_HPFS_SECURITY_DATA  MTF_MARKER( 'O','A','C','L' )
  128. #define  MTF_HPFS_EA_DATA        MTF_MARKER( 'O','2','E','A' )
  129. #define  MTF_OTC_SET_MAP_DATA    MTF_MARKER( 'T','S','M','P' )
  130. #define  MTF_OTC_FILE_DD_DATA    MTF_MARKER( 'T','F','D','D' )
  131. #define  MTF_PATH_NAME_STREAM    MTF_MARKER( 'P','N','A','M' )
  132. #define  MTF_FILE_NAME_STREAM    MTF_MARKER( 'F','N','A','M' )
  133. #define  MTF_MAC_RESOURCE        MTF_MARKER( 'M','R','S','C' )
  134. #define  MTF_NOVELL_286          MTF_MARKER( 'N','2','8','6' )
  135. #define  MTF_NOVELL_386          MTF_MARKER( 'N','3','8','6' )
  136. #define  MTF_CRC_STREAM          MTF_MARKER( 'S','C','R','C' )
  137. #define  MTF_NTFS_ALT_DATA       MTF_MARKER( 'A','D','A','T' )
  138. #define  MTF_STRMPAD             MTF_MARKER( 'S','P','A','D' )
  139.  
  140.  
  141.  
  142.  
  143.  
  144. /* Defines for file system stream attributes */
  145. #define  MTF_STREAM_PLAIN     0     /* No special conditions for stream */
  146. #define  MTF_STREAM_MOD_READ  1     /* Stream altered by read operation */
  147. #define  MTF_STREAM_CONT_SEC  2     /* Stream contains security data    */
  148. #define  MTF_STREAM_NON_PORT  3     /* Data only for same OS saved from */
  149. #define  MTF_CONT_STREAM      0x20  /* This stream is continued from a
  150.                                        previous tape. */
  151. /* Defines for tape format stream attributes */
  152. #define  MTF_STREAM_CONTINUE  0     /* This is a continuation stream */
  153. #define  MTF_STREAM_VARIABLE  1     /* The data size for this stream is variable */
  154. #define  MTF_STREAM_VAR_END   2     /* This is the last part of variable length data */
  155. /* Defines for data alignment within streams */
  156. #define  MTF_STREAM_ALIGN_MASK   0xC000
  157. #define  MTF_STREAM_ALIGN_4      0x0000   /* 4 byte alignment        */
  158. #define  MTF_STREAM_ALIGN_2      0x4000   /* 2 byte alignment        */
  159. #define  MTF_STREAM_ALIGN_4      0x8000   /* 1 byte alignment        */
  160. #define  MTF_STREAM_ALIGN_RSVD   0xC000   /* Reserved for future use */
  161. /* MTF DBLK types */
  162. #define  MTF_TAPE_N     "TAPE"    /* Tape Header             */
  163. #define  MTF_VOLB_N     "VOLB"    /* Volume Descriptor       */
  164. #define  MTF_SSET_N     "SSET"    /* Start of Backup Set     */
  165. #define  MTF_ESET_N     "ESET"    /* End of Backup Set       */
  166. #define  MTF_EOTM_N     "EOTM"    /* End of Tape             */
  167. #define  MTF_DIRB_N     "DIRB"    /* Directory Descriptor    */
  168. #define  MTF_FILE_N     "FILE"    /* File Descriptor         */
  169. #define  MTF_IMAG_N     "IMAG"    /* Image Descriptor        */
  170. #define  MTF_CFIL_N     "CFIL"    /* Corrupt File Descriptor */
  171. #define  MTF_ESPB_N     "ESPB"    /* End of Set Pad Descriptor */
  172. #define  MTF_SSES_N     "SSES"    /* Start Of Session Descriptor */
  173. #define  MTF_ESES_N     "ESES"    /* End of Session Descriptor */
  174. #define  MTF_EOBJ_N     "EOBJ"    /* End of Object Descriptor */
  175. /*   The "block header" is common to all logical tape blocks.  The software need only
  176.      analyze the block header to determine the type of tape block it is and whether
  177.      the software understands this particular tape block or not.  All ordering is
  178.      little endian (INTEL low byte, high byte).    */
  179. typedef struct {
  180.      UINT8  block_type[4] ;         /* Unique identifier, see above      */
  181.      UINT32 block_attribs ;         /* Tape Format attributes            */
  182.      UINT16 offset_to_data ;        /* From start of DBLK in bytes       */
  183.      UINT8  machine_os_id    ;      /* Machine/OS id where written       */
  184.      UINT8  machine_os_version ;    /* Machine/OS version where written  */
  185.      UINT64 displayable_size ;      /* Displayable data size             */
  186.      UINT64 logical_block_address ; /* See note at top of file           */
  187.      UINT64 session_id ;            /* Logical Block Address of SSES DBLK */
  188.      UINT32 control_block_id ;      /* Used for error recovery           */
  189.      MTF_TAPE_ADDRESS string_storage ;   /* Location of string storage   */
  190.      MTF_TAPE_ADDRESS os_specific_data ; /* Location of OS specific data */
  191.      UINT8  string_type ;           /* Single byte or UNICODE            */
  192.      UINT8  reserved ;              /* Reserved for future use           */
  193.      UINT16 hdr_chksm ;             /* Checksum of the block header.  The
  194.                                        algorithm is: XOR each double word
  195.                                        preceeding this one and store the result
  196.                                        here. (When the checksum is verified the
  197.                                        'block_type' is checked for a non_zero value
  198.                                        also. */
  199. } MTF_DB_HDR, * MTF_DB_HDR_PTR ;
  200. /* Block Attribute Bit Definitions */
  201. /* Tape Header DBLK Structure (TAPE) */
  202. typedef struct {
  203.      MTF_DB_HDR       block_header ;              /* Common header         */
  204.      UINT32           tape_id_number ;            /* Unique family ID      */
  205.      UINT32           tape_attributes ;           /* External Attributes   */
  206.      UINT16           tape_seq_number ;           /* Sequence in family    */
  207.      UINT16           password_encryption_algor ; /* Unique algorithm ID   */
  208.      UINT16           ecc_alg ;                   /* Unique algorithm ID   */
  209.      UINT16           otc_type ;                  /* On Tape Catalog Type  */
  210.      MTF_TAPE_ADDRESS tape_name ;                 /* Offset/Size of string */
  211.      MTF_TAPE_ADDRESS tape_description ;          /* Offset/Size of string */
  212.      MTF_TAPE_ADDRESS tape_password ;             /* Offset/Size of string */
  213.      MTF_TAPE_ADDRESS software_name ;             /* Offset/Size of string */
  214.      UINT16           logical_block_size ;        /* Alignment factor      */
  215.      UINT16           software_vendor_id ;        /* Backup Vendor         */
  216.      MTF_DATE_TIME    tape_date ;
  217.      UINT8            tape_format_version_major ; /* Integer value         */
  218. } MTF_TAPE, * MTF_TAPE_PTR ;
  219. #define MTF_ECC_NONE  0
  220. #define MTF_OTC_TYPE  1  /* Type of OTC, this type value is reserved for MTF */
  221. /* Start of Backup Set DBLK Structure (SSET) */
  222. typedef struct {
  223.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  224.      UINT32           sset_attribs ;  /* External Attributes               */
  225.      UINT16           pswd_encr_alg ; /* Password encryption algorithm ID  */
  226.      UINT16           data_encr_alg ; /* Data encryption algorithm ID      */
  227.      UINT16           data_comp_alg ; /* Data compressionalgorithm ID      */
  228.      UINT16           set_number ;    /* Number of set in family           */
  229.      MTF_TAPE_ADDRESS set_name ;      /* Offset/Size of set name string    */
  230.      MTF_TAPE_ADDRESS set_descr ;     /* Offset/Size of description string */
  231.      MTF_TAPE_ADDRESS set_password ;  /* Offset/Size of password string    */
  232.      MTF_TAPE_ADDRESS user_name ;     /* Offset/Size of user name string   */
  233.      UINT64           pba ;           /* Physical Block Address            */
  234.      MTF_DATE_TIME    backup_date ;   /* Date/Time backup was started      */
  235.      UINT8            sftwr_ver_mjr ; /* Major software revision (integer) */
  236.      UINT8            sftwr_ver_mnr ; /* Minor software revision (integer) */
  237.      INT8             time_zone ;     /* Time zone where backed up         */
  238.      UINT8            tape_format_version_minor ; /*                       */
  239.      UINT8            tape_catalog_version ;
  240. }
  241. MTF_SSET, *MTF_SSET_PTR;
  242.  
  243. /* End of Backup Set DBLK Structure (ESET) */
  244. typedef struct {
  245.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  246.      UINT32           eset_attribs ;  /* External Attributes               */
  247.      UINT32           corrupt_count ; /* Number of corrupt file in the set */
  248.      UINT64           sm_pba ;        /* Physical Address of OTC Set Map   */
  249.      UINT64           fdd_pba ;       /* PBA of OTC File/Directory Detail  */
  250.      UINT16           fdd_seq_num ;   /* Tape number where F/DD begins     */
  251.      UINT16           set_number ;    /* Number of set in family           */
  252.      MTF_DATE_TIME    backup_date ;   /* Date and time of backup           */
  253. } MTF_ESET, * MTF_ESET_PTR ;
  254. /* End of Tape DBLK Structure (EOTM) */
  255. typedef struct {
  256.      MTF_DB_HDR  block_hdr ;          /* Common header                     */
  257.      UINT32      eset_pba ;           /* Physical Address of last on tape  */
  258. } MTF_EOTM, * MTF_EOTM_PTR ;
  259. /* Directory DBLK Structure (DIRB) */
  260. typedef struct {
  261.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  262.      UINT32           dirb_attribs ;  /* External Attributes               */
  263.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  264.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  265.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  266.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  267.      UINT32           dir_id ;        /* For error recovery                */
  268.      MTF_TAPE_ADDRESS dir_name ;      /* Offset/Size of path string        */
  269. } MTF_DIR, * MTF_DIR_PTR ;
  270. /* File DBLK Structure (FILE) */
  271. typedef struct {
  272.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  273.      UINT32           file_attribs ;  /* External Attributes               */
  274.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  275.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  276.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  277.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  278.      UINT32           dir_id ;        /* Of DIRB where file exists         */
  279.      UINT32           file_id ;       /* For error recovery                */
  280.      MTF_TAPE_ADDRESS file_name ;     /* Offset/Size of file name string   */
  281. } MTF_FILE, * MTF_FILE_PTR ;
  282. /* Image DBLK Structure (IMAG) */
  283. typedef struct {
  284.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  285.      UINT32           imag_attribs ;  /* External Attributes               */
  286.      UINT32           part_size ;     /* Size of partition in bytes        */
  287.      UINT32           bytes_in_sect ; /* Number of bytes per sector        */
  288.      UINT32           no_of_sectors ; /* Number of sectors                 */
  289.      UINT32           rel_sect_no ;   /* Relative sector number            */
  290.      UINT32           sect_part_no ;  /* Partition number of sector        */
  291.      UINT16           part_sys_ind ;  /* Partition system indicator        */
  292.      UINT16           no_of_heads ;   /* Number of heads                   */
  293.      MTF_TAPE_ADDRESS part_name ;     /* Offset/Size of partition name     */
  294. } MTF_IMAG, * MTF_IMAG_PTR ;
  295. /* Corrupt File DBLK Structure (CFIL) */
  296. typedef struct {
  297.      MTF_DB_HDR  block_hdr ;          /* Common header                     */
  298.      UINT32      cfil_attribs ;       /* External Attributes               */
  299.      UINT32      file_id ;            /* Same as associated FILE           */
  300.      UINT32      directory_id ;       /* Same as associated FILE           */
  301.      UINT64      stream_offset ;      /* Offset in data stream where read failed. */
  302.      UINT32      corrupt_stream_id ;  /* Data Stream where corruption occurs */
  303. } MTF_CFIL, * MTF_CFIL_PTR ;
  304.  
  305. /* Volume DBLK Structure (VOLB) */
  306. typedef struct {
  307.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  308.      UINT32           volb_attribs ;  /* External Attributes               */
  309.      MTF_TAPE_ADDRESS device_name ;   /* Offset/Size of device name string */
  310.      MTF_TAPE_ADDRESS volume_name ;   /* Offset/Size of volume name string */
  311.      MTF_TAPE_ADDRESS machine_name ;  /* Offset/Size of machine name       */
  312.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date \(before this\)    */
  313. } MTF_VOL, * MTF_VOL_PTR ;
  314. /* Start Of Session DBLK Structure (SSES) */
  315. typedef struct {
  316.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  317.      UINT64 session_id ;
  318.     /* Logical Block Address of this DBLK */
  319. } MTF_SSES, * MTF_SSES_PTR ;
  320. /* End Of Session DBLK Structure (ESES) */
  321. typedef struct {
  322.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  323.      UINT64           session_id ;    /* Logical Block Address of the SSES DBLK
  324.                                          that marks the start of this session  */
  325. } MTF_ESES, * MTF_ESES_PTR ;
  326. /* End Of Object DBLK Structure (EOBJ) */
  327. typedef struct {
  328.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  329.      UINT64           session_id ;
  330.     /* Logical Block Address of the SSES DBLK
  331.                                          that marks the start of this session  */
  332.      UINT64           object_lba ;
  333.     /* Logical Block Address of the DBLK
  334.                                          that marks the start of the object just
  335.                                          backed up in this session  */
  336. } MTF_EOBJ, * MTF_EOBJ_PTR ;
  337. /* End Of Set Pad DBLK Structure (ESPB) */
  338. typedef struct {
  339.      MTF_DB_HDR       block_hdr ;     /* Common header                     */
  340. } MTF_ESPB, * MTF_ESPB_PTR ;
  341. / On Tape Catalog (OTC) Structures */
  342. /* Set Map Header Structure */
  343. typedef struct {
  344.      UINT32    family_id ;    /* Unique tape family ID                     */
  345.      UINT16    num_set_recs ; /* Number of Set Map entries to follow       */
  346.      UINT8     pad[2] ;       /* Ensure 4 byte alignment of first SM entry */
  347. } MTF_SM_HDR, * MTF_SM_HDR_PTR ;
  348. /* Set Map Entry Structure */
  349. typedef struct {
  350.      UINT16           length ;        /* Length of entry (including
  351.                                          strings) in bytes                 */
  352.      UINT16           sset_seq_num ;  /* Tape number where set begins      */
  353.      UINT32           blk_attribs ;   /* Tape Format Attributes            */
  354.      UINT32           set_attribs ;   /* External Attributes               */
  355.      UINT64           sset_pba ;      /* Address of associated SSET        */
  356.      UINT64           fdd_pba ;       /* Address of associated F/DD        */
  357.      UINT16           fdd_seq_num ;   /* Tape number where F/DD begins     */
  358.      UINT16           set_num ;       /* Backup Set Number                 */
  359.      UINT64           lba ;           /* See note at top of file           */
  360.      UINT32           num_dirs ;      /* Number of directories in set      */
  361.      UINT32           num_files ;     /* Number of files in set            */
  362.      UINT32           corrupt_count ; /* Number of corrupt files in set    */
  363.      UINT64           disp_size ;     /* Displayable size of assoc. SSET   */
  364.      UINT16           num_volumes ;   /* No. of OTC vol entries to follow  */
  365.      UINT16           pswd_encr_alg ; /* Password Encryption Algorithm ID  */
  366.      MTF_TAPE_ADDRESS set_name ;      /* Offset/Size of set name string    */
  367.      MTF_TAPE_ADDRESS password ;      /* Offset/Size of description string */
  368.      MTF_TAPE_ADDRESS set_descr ;     /* Offset/Size of password string    */
  369.      MTF_TAPE_ADDRESS user_name ;     /* Offset/Size of user name string   */
  370.      MTF_DATE_TIME    backup_date ;   /* Date/Time backup was started      */
  371.      INT8             time_zone ;     /* Time zone where backed up         */
  372.      UINT8            os_id ;         /* Machine/OS id where written       */
  373.      UINT8            os_ver ;        /* Machine/OS version where written  */
  374.      UINT8            string_type ;   /* Type of strings stored            */
  375.      UINT8            tape_format_version_minor ;
  376.      UINT8            tape_catalog_version;
  377. } MTF_SM_ENTRY, * MTF_SM_ENTRY_PTR ;
  378. /* Common File/Directory Detail Entry Header Structure */
  379. typedef struct {
  380.      UINT32    length ;               /* Length of entry (including
  381.                                          strings) in bytes                 */
  382.      UINT8     type[4] ;              /* As in associated DBLK             */
  383.      UINT16    seq_num ;              /* Tape number of associated DBLK    */
  384.      UINT32    blk_attribs ;          /* Tape Format Attributes            */
  385.      UINT32    lba ;                  /* See note at top of file           */
  386.      UINT64    disp_size ;            /* Displayable size of assoc. DBLK   */
  387.      INT32     link ;
  388.      UINT8     os_id ;                /* Machine/OS id where written       */
  389.      UINT8     os_ver ;               /* Machine/OS version where written  */
  390.      UINT8     string_type ;          /* Type of strings stored            */
  391.      UINT8     pad ;                  /* Pad to alignment boundary         */
  392. } MTF_FDD_HDR, * MTF_FDD_HDR_PTR ;
  393. /* File/Directory Detail Volume Entry Structure */
  394. typedef struct {
  395.      UINT32           vol_attribs ;   /* volb_attribs of associated VOLB   */
  396.      MTF_TAPE_ADDRESS device_name ;   /* Offset/Size of device name string */
  397.      MTF_TAPE_ADDRESS vol_name ;      /* Offset/Size of volume name string */
  398.      MTF_TAPE_ADDRESS machine_name ;  /* Offset/Size of machine name       */
  399.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  400. } MTF_FDD_VOL, * MTF_FDD_VOL_PTR ;
  401. /* File/Directory Detail Directory Entry Structure */
  402. typedef struct {
  403.     MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  404.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  405.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  406.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  407.      UINT32           dir_attribs ;   /* dirb_attribs of associated DIRB   */
  408.      MTF_TAPE_ADDRESS dir_name ;      /* Offset/Size of path string        */
  409. } MTF_FDD_DIR, * MTF_FDD_DIR_PTR ;
  410. /* File/Directory Detail File Entry Structure */
  411. typedef struct {
  412.      MTF_DATE_TIME    last_mod_date ; /* Last Modified Date                */
  413.      MTF_DATE_TIME    create_date ;   /* Date created                      */
  414.      MTF_DATE_TIME    backup_date ;   /* Last Backup Date (before this)    */
  415.      MTF_DATE_TIME    last_acc_date ; /* Last Access Date                  */
  416.      UINT32           file_attribs ;  /* file_attribs of associated FILE   */
  417.      MTF_TAPE_ADDRESS file_name ;     /* Offset/Size of file name string   */
  418. } MTF_FDD_FILE, * MTF_FDD_FILE_PTR ;
  419.  
  420. #endif // MICROSOFT_TAPE_FORMAT_HEADER
  421.